/*
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 */

package br.ufrj.dcc.comp2.projeto.vistas;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.font.TextAttribute;
import java.awt.geom.AffineTransform;
import java.text.AttributedString;
import java.util.Iterator;

import javax.swing.JPanel;

import br.ufrj.dcc.comp2.projeto.controles.MarteAtaca;
import br.ufrj.dcc.comp2.projeto.modelos.Alienigena;
import br.ufrj.dcc.comp2.projeto.modelos.Fundo;
import br.ufrj.dcc.comp2.projeto.modelos.Tiro;
import br.ufrj.dcc.comp2.projeto.internacionalizacao.*;

/**
 * Painel do jogo, que � mostrado enquanto o jogador joga.
 * @author Bruno(Magoo), Eluan(Acre), Diego(Silvio), Davi.
 *
 */
public class PainelJogo extends JPanel {
	private static final long serialVersionUID = 1L;
	
	private MarteAtaca ma;
	private Fundo fundo = new Fundo("resources/fundo.gif");
	
	
	public PainelJogo(MarteAtaca ma){
		this.ma = ma;
		this.setSize((int)ma.getTamanhoTela().getX(), (int)ma.getTamanhoTela().getY());
	}
	
	public void paint(Graphics gParent){
		super.paintComponent(gParent);
		Graphics2D g = (Graphics2D)gParent;
		AffineTransform transform = new AffineTransform();
		
		g.drawImage(fundo.getImagem(), 0, 0, this);

		synchronized(ma.getControlaJogo().getTiros()) {
			Iterator<Tiro> itTiro;
			
			itTiro = ma.getControlaJogo().getTiros().iterator();
			while (itTiro.hasNext()) {
				Tiro x = itTiro.next();
				transform.setToIdentity();
				transform.rotate(x.getPosicaoAngular(), (x.getPosicao().getX() + x.getTamanho().getX()/2), (x.getPosicao().getY() + x.getTamanho().getY()/2));
				transform.translate(x.getPosicao().getX(), x.getPosicao().getY());
				g.drawImage(x.getImagem(), transform, this);
			}
		}
		
		transform.setToIdentity();
		transform.rotate(ma.getControlaJogo().getNave().getPosicaoAngular(), (ma.getControlaJogo().getNave().getPosicao().getX() + ma.getControlaJogo().getNave().getTamanho().getX()/2), (ma.getControlaJogo().getNave().getPosicao().getY() + ma.getControlaJogo().getNave().getTamanho().getY()/2));
		transform.translate(ma.getControlaJogo().getNave().getPosicao().getX(), ma.getControlaJogo().getNave().getPosicao().getY());
		g.drawImage(ma.getControlaJogo().getNave().getImagem(), transform, this);

		synchronized(ma.getControlaJogo().getAlienigenasTiros()) {
			Iterator<Tiro> itAlienigenasTiros;
			
			itAlienigenasTiros = ma.getControlaJogo().getAlienigenasTiros().iterator();
			while (itAlienigenasTiros.hasNext()) {
				Tiro x = itAlienigenasTiros.next();
				transform.setToIdentity();
				transform.rotate(x.getPosicaoAngular(), (x.getPosicao().getX() + x.getTamanho().getX()/2), (x.getPosicao().getY() + x.getTamanho().getY()/2));
				transform.translate(x.getPosicao().getX(), x.getPosicao().getY());
				g.drawImage(x.getImagem(), transform, this);
			}
		}
		
		synchronized(ma.getControlaJogo().getAlienigenas()) {
			Iterator<Alienigena> itAlienigenas;
			
			itAlienigenas = ma.getControlaJogo().getAlienigenas().iterator();
			while (itAlienigenas.hasNext()) {
				Alienigena x = itAlienigenas.next();
				transform.setToIdentity();
				transform.rotate(x.getPosicaoAngular(), (x.getPosicao().getX() + x.getTamanho().getX()/2), (x.getPosicao().getY() + x.getTamanho().getY()/2));
				transform.translate(x.getPosicao().getX(), x.getPosicao().getY());
				g.drawImage(x.getImagem(), transform, this);
			}
		}
		

		for (int i = 0; i < ma.getControlaInformacoes().getVidas(); i++) {
			double escala = 0.3;
			int xInicial = (int)(ma.getControlaJogo().getTamanhoTela().getX() * 0.95);
			int yInicial = (int)(ma.getControlaJogo().getTamanhoTela().getY() * 0.85);
			
			transform.setToIdentity();
			transform.translate(xInicial - ma.getControlaJogo().getNave().getTamanho().getX()*i*escala, yInicial);
			transform.scale(escala, escala);
			g.drawImage(ma.getControlaJogo().getNave().getImagem(), transform, this);
		}
		
		String text = new String(InterGeral.retornaStringLocalizada(ma.getIdioma(), InterGeral.PONTOS) + ": " + ma.getControlaInformacoes().getPontos());
		AttributedString attText = new AttributedString(text);
		attText.addAttribute(TextAttribute.FOREGROUND, Color.yellow);
		attText.addAttribute(TextAttribute.FAMILY, "helvetica");
		
		g.drawString(attText.getIterator(), (float)(ma.getControlaJogo().getTamanhoTela().getX() * 0.01), (float)(ma.getControlaJogo().getTamanhoTela().getY() * 0.87));

		if (ma.getControlaJogo().isPausado()) {			
			String text2 = InterGeral.retornaStringLocalizada(ma.getIdioma(), InterGeral.PAUSADO);
			AttributedString attText2 = new AttributedString(text2);
			attText2.addAttribute(TextAttribute.FOREGROUND, Color.BLUE);
			attText2.addAttribute(TextAttribute.FAMILY, "helvetica");
			attText2.addAttribute(TextAttribute.SIZE, 25);
		
			/* Não centralizado, mas whatever */
			g.drawString(attText2.getIterator(), (float)(ma.getControlaJogo().getTamanhoTela().getX()/2 - 50), (float)(ma.getControlaJogo().getTamanhoTela().getY()/2));
		}
	}
	
}
